package com.bing.common;

import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 用户信息
 */
@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    private String id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 是否在线
     */
    private boolean online;

    /**
     * 注册时间
     */
    private String registerTime;

    /**
     * 上次登录时间
     */
    private Date lastLoginTime;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 聊天记录
     */
    private List<String> chatHistory;

    /**
     * IP地址
     */
    private String ipAddress;

    public User() {
        this.chatHistory = new ArrayList<>();
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
        this.chatHistory = new ArrayList<>();
    }

    /**
     * 添加聊天记录
     * 
     * @param message 聊天消息
     */
    public void addChatMessage(String message) {
        if (chatHistory == null) {
            chatHistory = new ArrayList<>();
        }
        chatHistory.add(message);
        // 限制历史记录数量，避免占用过多内存
        if (chatHistory.size() > 100) {
            chatHistory.remove(0);
        }
    }

    /**
     * 获取聊天历史记录
     * 
     * @return 聊天历史记录列表
     */
    public List<String> getChatHistory() {
        if (chatHistory == null) {
            return new ArrayList<>();
        }
        return chatHistory;
    }

    /**
     * 修改用户名
     * 
     * @param newUsername 新用户名
     */
    public void updateUsername(String newUsername) {
        this.username = newUsername;
    }

    /**
     * 修改密码
     * 
     * @param newPassword 新密码
     */
    public void updatePassword(String newPassword) {
        this.password = newPassword;
    }

    /**
     * 修改邮箱
     * 
     * @param newEmail 新邮箱
     */
    public void updateEmail(String newEmail) {
        this.email = newEmail;
    }

    /**
     * 设置上次登录时间
     * 
     * @param lastLoginTime 上次登录时间
     */
    public void setLastLoginTime(Date lastLoginTime) {
        this.lastLoginTime = lastLoginTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='******'" +
                ", registerTime='" + registerTime + '\'' +
                ", lastLoginTime=" + lastLoginTime +
                ", online=" + online +
                ", chatHistorySize=" + (chatHistory == null ? 0 : chatHistory.size()) +
                '}';
    }
}